<?php


namespace app\common\service;


use think\facade\Env;

class Crypt
{
    public const METHOD = 'AES-128-CBC';

    /**
     * 加密数据
     *
     * @param $data string|array 需要加密的数据
     * @param $key string key
     * @param $iv string iv
     *
     * @return String
     */
    public static function en($data, $key, $iv): string
    {
        if (is_array($data)) {
            $data = json_encode($data);
        }
        return base64_encode(openssl_encrypt($data, self::METHOD, $key, OPENSSL_PKCS1_PADDING, $iv));
    }

    /**
     * 解密数据
     *
     * @param $data string 需要解密的数据
     * @param $key string key
     * @param $iv string iv
     *
     * @return string
     */
    public static function de($data, $key, $iv): string
    {
        return openssl_decrypt(base64_decode($data), self::METHOD, $key, OPENSSL_PKCS1_PADDING, $iv);
    }


    /**
     * 密码加密
     * 使用方式 Crypt::password('liguoxin','abcABC123')  表中存salt和加密后的password，比對結果
     * @param $password string
     * @param $salt string
     * @return string
     */
    public static function password($password, $salt): string
    {
        return md5(sprintf('%s%s%s', Env::get('salt.password'), $password, $salt));
    }
}